package com.winit.schedule.job.tracker.repository.mysql.dao;

import java.util.List;
import java.util.Map;

import com.winit.schedule.core.model.TaskID;
import com.winit.schedule.core.repository.constants.TaskStatus;
import com.winit.schedule.core.repository.entity.TaskEntity;
import com.winit.schedule.core.repository.query.TaskQuery;
import com.winit.schedule.core.task.TaskInterfaceType;

public interface MysqlTaskDao {

    void saveTask(TaskEntity taskEntity);
    
    void updateTask(TaskEntity taskEntity);

    void updateTaskInterfaceType(String taskId, TaskInterfaceType interfaceType);

    TaskEntity getTaskById(String taskId);

    void removeTask(String taskId);

    List<TaskEntity> findTasks(TaskQuery query);

    void updateTaskStatusByTaskId(String taskId, TaskStatus status);

    /**
     * 更新所有关联jobId的task的状态
     * 
     * @param jobId
     * @param status
     */
    void updateTaskStatusByJobId(String jobId, TaskStatus status);

    /**
     * task关联job
     * 
     * @param String jobId,String runStartTime,String runEndTime, List<String> taskIds
     */
    void updateJobIdAndRunTimeForTask(Map<String, Object> params);

    /**
     * task取消关联job
     * 
     * @param jobId
     * @param isDelete
     */
    void delJobIdForTask(String jobId);

    /**
     * 根据jobID查询所有关联的taskID
     * 
     * @param jobId
     * @return
     */
    List<String> queryAllTaskIDByJobId(String jobId);

    /**
     * 查询所有已停止任务的ID
     * 
     * @return
     */
    List<TaskID> queryAllStopTaskIDs();

    /**
     * 查询所有未关联job的任务
     * 
     * @return
     */
    List<TaskEntity> queryTasksNotRelatedJob();

    List<TaskEntity> queryTasksRelatedJob(String jobId);

    /**
     * 根据taskGroup查询所有任务ID
     * @return
     */
    List<TaskID> queryAllTaskIdByTaskTracker(String taskGroup);

}
